using System;
using System.ComponentModel.DataAnnotations;
using TiaoTaoHelper.Wtm.Models;
using WalkingTec.Mvvm.Core;

namespace HengTong.Model.Db.System;

/// <summary>
/// 系统印章管理实体类
/// 用于管理企业组织的各类印章信息
/// </summary>
/// <remarks>
/// 该类继承自TopBasePoco，包含了完整的印章信息，
/// 包括基本信息、组织信息、印章图片、使用权限和状态信息等
/// </remarks>
public class SysSeal : BasePoco
{
    /// <summary>
    /// 获取或设置印章名称
    /// </summary>
    /// <value>印章的正式名称，不能为空，最大长度128字符</value>
    [Display(Name = "印章名称", Description = "印章的正式名称", GroupName = "基本信息")]
    [Required(ErrorMessage = "印章名称不能为空")]
    [MaxLength(128)]
    public string SealName { get; set; }
    
    /// <summary>
    /// 获取或设置印章编码
    /// </summary>
    /// <value>印章的唯一编码，用于系统内部识别，最大长度64字符</value>
    [Display(Name = "印章编码", Description = "印章的唯一编码", GroupName = "基本信息")]
    [MaxLength(64)]
    public string SealCode { get; set; }
    
    
    /// <summary>
    /// 获取或设置所属组织
    /// </summary>
    /// <value>印章所属的组织机构信息</value>
    [Display(Name = "所属组织", Description = "印章所属的组织机构", GroupName = "组织信息")]
    public SysOrg Org { get; set; }
    
    /// <summary>
    /// 获取或设置所属组织ID
    /// </summary>
    /// <value>印章所属组织的唯一标识符</value>
    [Display(Name = "所属组织ID", Description = "印章所属组织的唯一标识符", GroupName = "组织信息")]
    public Guid? OrgId { get; set; }
    
    /// <summary>
    /// 获取或设置所属用户组
    /// </summary>
    /// <value>印章所属的用户组信息，用于权限控制</value>
    [Display(Name = "所属用户组", Description = "印章所属的用户组", GroupName = "权限信息")]
    public SysGroup Group { get; set; }
    
    /// <summary>
    /// 获取或设置所属用户组ID
    /// </summary>
    /// <value>印章所属用户组的唯一标识符</value>
    [Display(Name = "所属用户组ID", Description = "印章所属用户组的唯一标识符", GroupName = "权限信息")]
    public Guid? GroupId { get; set; }
    

    /// <summary>
    /// 获取或设置印章类型
    /// </summary>
    /// <value>印章的类型分类，使用SealTypeEnum枚举值</value>
    [Display(Name = "印章类型", Description = "印章的类型分类", GroupName = "基本信息")]
    [Required(ErrorMessage = "印章类型不能为空")]
    public SealTypeEnum SealType { get; set; }

    /// <summary>
    /// 获取或设置印章图片
    /// </summary>
    /// <value>BASE64编码的印章图片数据，不能为空</value>
    [Display(Name = "印章图片", Description = "BASE64编码的印章图片", GroupName = "印章信息")]
    [Required(ErrorMessage = "印章图片不能为空")]
    public string SealImage { get; set; }
    
    /// <summary>
    /// 获取或设置印章状态
    /// </summary>
    /// <value>印章当前的使用状态，使用SealStatusEnum枚举值</value>
    [Display(Name = "印章状态", Description = "印章的当前状态", GroupName = "状态信息")]
    public SealStatusEnum Status { get; set; }

    
    /// <summary>
    /// 获取或设置使用次数
    /// </summary>
    /// <value>印章的累计使用次数</value>
    [Display(Name = "使用次数", Description = "印章的累计使用次数", GroupName = "使用信息")]
    public int UseCount { get; set; }

    /// <summary>
    /// 获取或设置最后使用时间
    /// </summary>
    /// <value>印章最近一次使用的时间</value>
    [Display(Name = "最后使用时间", Description = "印章最后使用的时间", GroupName = "使用信息")]
    public DateTime? LastUseTime { get; set; }

    /// <summary>
    /// 获取或设置备注信息
    /// </summary>
    /// <value>印章的其他备注信息，最大长度1000字符</value>
    [Display(Name = "备注信息", Description = "印章的备注信息", GroupName = "其他信息")]
    [StringLength(1000)]
    public string Remarks { get; set; }
}

/// <summary>
/// 印章类型枚举
/// 定义印章的不同类型分类
/// </summary>
public enum SealTypeEnum
{
    /// <summary>
    /// 公章 - 公司法人章
    /// </summary>
    [Display(Name = "公章")]
    公章 = 1,

    /// <summary>
    /// 财务章 - 财务专用章
    /// </summary>
    [Display(Name = "财务章")]
    财务章 = 2,

    /// <summary>
    /// 合同章 - 合同专用章
    /// </summary>
    [Display(Name = "合同章")]
    合同章 = 3,

    /// <summary>
    /// 法人章 - 法定代表人名章
    /// </summary>
    [Display(Name = "法人章")]
    法人章 = 4,

    /// <summary>
    /// 部门章 - 部门专用章
    /// </summary>
    [Display(Name = "部门章")]
    部门章 = 5,

    /// <summary>
    /// 发票章 - 发票专用章
    /// </summary>
    [Display(Name = "发票章")]
    发票章 = 6,

    /// <summary>
    /// 人事章 - 人事专用章
    /// </summary>
    [Display(Name = "人事章")]
    人事章 = 7,

    /// <summary>
    /// 其他章 - 其他类型印章
    /// </summary>
    [Display(Name = "其他章")]
    其他章 = 99
}

/// <summary>
/// 印章状态枚举
/// 定义印章的使用状态
/// </summary>
public enum SealStatusEnum
{
    /// <summary>
    /// 正常状态 - 可正常使用
    /// </summary>
    [Display(Name = "正常")]
    正常 = 1,

    /// <summary>
    /// 停用状态 - 暂时停止使用
    /// </summary>
    [Display(Name = "停用")]
    停用 = 2,

    /// <summary>
    /// 作废状态 - 永久作废
    /// </summary>
    [Display(Name = "作废")]
    作废 = 3
}
